home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / instrsc.i < prev    next >
Text File  |  1997-10-26  |  26KB  |  746 lines

  1. IMPLEMENTATION MODULE InstRsc; (*$M-*)
  2.  
  3. FROM SYSTEM     IMPORT  ADR, TSIZE, ASSEMBLER, ADDRESS, CADR, CAST, BYTE;
  4.  
  5. (*$R-, S-, P+, M- *) 
  6. (*  Graphics  *)
  7.  
  8. (* GrafBase kann ich benutzen, da keine Aufrufe der MM2 GEM-Library gemacht
  9.  * werden
  10.  *)
  11.  
  12. FROM GrafBase   IMPORT Rect, Point, Rectangle, FrameRects,
  13.                        MemFormDef, BitOperation, TransRect;
  14.  
  15. FROM Storage    IMPORT ALLOCATE, DEALLOCATE;
  16.                      
  17. (* Importe aus der MagicLib: *)
  18.  
  19. FROM MagicTypes IMPORT MFORM;
  20.  
  21. FROM MagicSys   IMPORT sBITSET, sINTEGER, sCARDINAL, CastToInt;
  22.  
  23. FROM MagicAES   IMPORT
  24.      OBJECT, SELECTABLE, SELECTED, DISABLED, SHADOWED, EDITABLE,
  25.      Exit, DEFAULT, OUTLINED, HIDETREE,
  26.      GBOX, GIBOX, GBOXCHAR, GIMAGE, GICON, GTEXT, GBOXTEXT,
  27.      GFTEXT, GFBOXTEXT, GBUTTON,
  28.      RED, BLUE, BLACK,
  29.      AESIntIn, AESIntOut, EvntPmulti, MUKEYBD, MUTIMER,
  30.      CallResult, BoxInfo,
  31.      ObjcOffset,  ObjcDraw ,
  32.      WindUpdate, ENDUPDATE, BEGUPDATE, ENDMCTRL, BEGMCTRL,
  33.      ShelRead, ShelFind,
  34.      RsrcLoad, RsrcFree, RsrcGaddr, RTREE, RFRSTR, RSTRING,
  35.      Horizontal, Vertical, GrafSlidebox, GrafHandle,
  36.      GrafMkstate, GrafMouse, USERDEF,
  37.      WindGet, WFWORKXYWH,
  38.      EvntTimer;
  39.      
  40. FROM MagicVDI   IMPORT
  41.      TransformForm, REPLACE, CopyRasterOpaque, SetFillcolor;
  42.  
  43. FROM MagicDOS    IMPORT Dgetpath, Dgetdrv;
  44.  
  45. FROM mtAppl     IMPORT
  46.      ApplInit, ApplTerm, ApplIdent, ApplPath, VDIHandle, MaxWidth, MaxHeight,
  47.      MouseArrow, MouseBusy, MouseUser, UserMouse, Bitplanes;
  48.  
  49. FROM mtUtils         IMPORT SetObjcStringAdr, SetObjcString, ObjcString,
  50.                             InclFlag, ExclFlag, InFlag, InclState, ExclState,
  51.                             InState, ObjcStrLen, ObjcArea, SetObjcRect, tRect,
  52.                             CalcArea, ObjcRect;
  53.  
  54. FROM mtDir      IMPORT GetDir;
  55.  
  56. FROM SysUtil0   IMPORT WExcl;
  57. (*
  58. FROM Lists      IMPORT  List,           CreateList,     DeleteList,
  59.                         AppendEntry,    ListEmpty,      CurrentEntry,
  60.                         NextEntry,      ResetList,      RemoveEntry,
  61.                         ScanEntries,    LDir,           LCondProc,
  62.                         NoOfEntries,    PrevEntry;
  63. *)
  64. FROM Strings    IMPORT  String,         Space,          Pos,
  65.                         DelLeadingBlanks,               Append,
  66.                         Assign,         Concat,         Empty,
  67.                         Insert;
  68.  
  69. FROM StrConv    IMPORT StrToInt, IntToStr;
  70.  
  71. FROM FileNames  IMPORT SplitPath, ConcatPath, PathConc;
  72.  
  73. FROM BinOps     IMPORT LowerInt;
  74.  
  75. IMPORT FastStrings;
  76. FROM Directory IMPORT SetDefaultPath, CreateDir;
  77.  
  78. IMPORT Inst_30; (* Resource-Definitions *)
  79.  
  80.  
  81. (* MagicLib *)
  82. IMPORT MagicAES;
  83. IMPORT MagicVDI;
  84. IMPORT MagicDOS;
  85. IMPORT MagicStrings;
  86. IMPORT MagicConvert;
  87. IMPORT MagicSys;
  88.  
  89. (* MagicTools *)
  90. IMPORT mtAppl;
  91. IMPORT mtCommand;
  92. IMPORT mtUtils;
  93. IMPORT mtDir;
  94. IMPORT mtTextfiles;
  95. IMPORT mtTime;
  96.  
  97. FROM Void       IMPORT v;
  98.  
  99. TYPE FileStr  = ARRAY [0..139] OF CHAR;
  100.   
  101. VAR
  102.         apId            : CARDINAL;
  103.         gemHdl          : INTEGER;
  104.         devHdl          : INTEGER;
  105.         
  106.         charWidth,
  107.         charHeight      : INTEGER;
  108.         
  109.         voidI           : INTEGER;
  110.         voidC           : CARDINAL;
  111.         voidO           : BOOLEAN;
  112.         vr              : tRect;
  113.         
  114.         (* image und icon-konvertierung *)
  115.                 
  116. PROCEDURE vdiFix (VAR pfd : MemFormDef; theAddr : ADDRESS;
  117.                   wb, h : CARDINAL);
  118. BEGIN
  119.   WITH pfd DO
  120.     words  := wb DIV 2;
  121.     w      := wb * 8;
  122.     h      := h;
  123.     planes := 1;   (* monochrom *)
  124.     start  := theAddr;
  125.   END;
  126. END vdiFix;
  127.  
  128. PROCEDURE vdiTrans (source : ADDRESS; sourceWb : CARDINAL;
  129.                     dest   : ADDRESS; destWb   : CARDINAL;
  130.                     h   : CARDINAL; handle : INTEGER);
  131.                     
  132.   VAR src, dst : MemFormDef;
  133. BEGIN
  134.   vdiFix (src, source, sourceWb, h);
  135.   src.standardForm := TRUE;
  136.   vdiFix (dst, dest, destWb, h);
  137.   dst.standardForm := FALSE;
  138.   TransformForm (handle, src, dst);
  139. END vdiTrans;
  140.  
  141. PROCEDURE transBitBlk (spec : PtrBitBlock; handle : INTEGER);
  142.   VAR tAddr : ADDRESS;
  143.       wb, hl : CARDINAL;
  144. BEGIN
  145.   tAddr := spec^.biData;
  146.   IF tAddr = ADDRESS(-1L) THEN RETURN END;
  147.   wb := spec^.biWb;
  148.   hl := spec^.biHl;
  149.   vdiTrans (tAddr, wb, tAddr, wb, hl, handle);
  150. END transBitBlk;
  151.  
  152. PROCEDURE transObj ( tree : PtrObjTree; obj : CARDINAL; handle : INTEGER);
  153.   VAR wb, hl    : CARDINAL;
  154.       tAddr     : ADDRESS;
  155.       spec      : PtrIconBlock;
  156.       type      : INTEGER;
  157. BEGIN
  158.   type := tree^[obj].obType;
  159.   spec := PtrIconBlock(tree^[obj].obSpec.IconPtr);
  160.   
  161.   CASE type OF
  162.                 GIMAGE   : transBitBlk (ADDRESS(spec), handle); |
  163.                 GICON    : hl := spec^.ibHicon;
  164.                            wb := (spec^.ibWicon + 7) DIV 8;
  165.                            tAddr := spec^.ibPdata;
  166.                            IF tAddr # ADDRESS(-1L)
  167.                            THEN
  168.                              vdiTrans (tAddr, wb, tAddr, wb, hl, handle)
  169.                            END;
  170.                            tAddr := spec^.ibPmask;
  171.                            IF tAddr # ADDRESS(-1L)
  172.                            THEN
  173.                              vdiTrans (tAddr, wb, tAddr, wb, hl, handle)
  174.                            END;
  175.                            
  176.   ELSE
  177.   END (* CASE *)
  178. END transObj;
  179.  
  180.         (*  Routinen fr den Umgang mit Objektb„umen  *)
  181.         (*  ========================================  *)
  182.  
  183. PROCEDURE DoSimpleBox (form: ADDRESS) : INTEGER;
  184.     VAR i : INTEGER;
  185.   BEGIN
  186.      WindUpdate (BEGUPDATE);
  187.      WindUpdate (BEGMCTRL);
  188.      MagicAES.FormCenter (form, vr);
  189.      MagicAES.FormDial (MagicAES.FMDSTART, vr, vr);
  190.      MagicAES.ObjcDraw (form, 0, 8, vr);
  191.      REPEAT
  192.        i := MagicAES.FormDo (form, 0);
  193.      UNTIL (i # -1) & (i # -2) & (i#-3);
  194.      MagicAES.FormDial (MagicAES.FMDFINISH, vr, vr);
  195.      WExcl (i, 15);
  196.      ExclState (form, i, SELECTED);
  197.      WindUpdate (ENDMCTRL);
  198.      WindUpdate (ENDUPDATE);
  199.      RETURN i
  200.   END DoSimpleBox;
  201.  
  202. PROCEDURE GetHomePath();
  203. VAR applpath:   MaxStr;
  204.     shelPath:   MaxStr;
  205.     shelCmd:    MaxStr;
  206.     cDrv:       INTEGER;
  207. BEGIN
  208.   cDrv := Dgetdrv();
  209.   Dgetpath (applpath, cDrv+1);
  210.   Insert ('A:',0, applpath, voidO);
  211.   applpath [0] := CHR(ORD('A')+CARDINAL(cDrv));
  212.   IF applpath[LENGTH(applpath)-1] # '\'
  213.   THEN
  214.     Append ('\',applpath, voidO);
  215.   END;
  216. (*  ApplPath (applpath); *)
  217.   ShelRead (shelPath, shelCmd);
  218.   (* Jetzt haben wir den aktuellen Pfad und den aus ShellRead.
  219.    * Jetzt mssen wir nur noch testen, welches der richtige ist
  220.    *)
  221.   IF Pos ('INST',shelPath,0) >= 0
  222.   THEN
  223.     (* Im ShellPfad ist PUTZ drin, also wird der wohl stimmen *)
  224.     SplitPath (shelPath, homePath, shelCmd);
  225.     IF Empty (homePath)
  226.     THEN
  227.       Assign (applpath, homePath, voidO);
  228.     END;
  229.   ELSE
  230.     (* PUTZ ist nicht im ShellPfad, dann nehmen wir lieber den aktuellen *)
  231.     Assign (applpath, homePath, voidO);
  232.   END;
  233. END GetHomePath;
  234.  
  235. VAR MaxBoxStrLen : INTEGER;
  236.  
  237. PROCEDURE InitResource (VAR resourceName : ARRAY OF CHAR) : BOOLEAN;
  238.   
  239.   CONST
  240.         noRscAlt        = '[3][Kann das Resource-File|INST_26.RSC nicht laden][Schade...]';
  241.         
  242.         noLowResAlt     = '[3][Die gew„hlte Aufl”sung|ist zu niedrig|fr Install!][ OK ]';
  243.         
  244.   VAR success     : BOOLEAN;
  245.       screenColumns : CARDINAL;
  246.       box         : BoxInfo;
  247.       rscLoaded   : BOOLEAN;
  248.       rscString   : FileStr;
  249.   BEGIN
  250.     
  251.     devHdl := VDIHandle;
  252.     GrafHandle (gemHdl, charWidth, charHeight, voidI, voidI);
  253.     
  254.     apId  := ApplIdent;
  255.     
  256.     GetHomePath();
  257.     
  258.     (* 80-Zeichen Bildschirm wird verlangt! *)
  259.     screenColumns := MaxWidth DIV charWidth;
  260.     
  261.     IF screenColumns < 80
  262.     THEN
  263.       voidI := MagicAES.FormAlert (1,noLowResAlt);
  264.       RETURN FALSE
  265.     END;
  266.                   (* Resource laden und Baumaddressen ermitteln *)
  267.     rscLoaded := RsrcLoad (resourceName);
  268.     IF ~rscLoaded
  269.     THEN
  270.       Concat (homePath, resourceName, rscString, voidO);
  271.       rscLoaded := RsrcLoad (rscString);
  272.     END;
  273.     IF ~rscLoaded
  274.     THEN
  275.       voidI := MagicAES.FormAlert (1,noRscAlt);
  276.       RETURN FALSE
  277.     END;
  278.     
  279.     infoBox       :=RsrcGaddr (RTREE, Infobox);
  280.     menu          :=RsrcGaddr (RTREE, Menu);
  281.     pathbox       :=RsrcGaddr (RTREE, Path_cnf);
  282.     helppath      :=RsrcGaddr (RTREE, Helppath);
  283.     (*
  284.     voidO := TRUE;
  285.     voidO    := voidO & NewDial (infoBox);
  286.     voidO    := voidO & NewDial (pathbox);
  287.     voidO    := voidO & NewDial (helppath);
  288.     IF ~voidO THEN RETURN FALSE END;
  289.     DialCenter (infoBox, CSCREEN, 0, 0, vr);
  290.     DialCenter (pathbox,  CSCREEN, 0, 0, vr);
  291.     DialCenter (helppath, CSCREEN, 0, 0, vr);
  292.     *)
  293.     
  294.     (* Versionsnummer einsetzen *)
  295.     SetObjcString (infoBox, Version, version);
  296.     
  297.     (* Bit Images anpassen *)
  298.     
  299.     transObj (infoBox, Thecat0, devHdl);
  300.     transObj (infoBox, Thecat1, devHdl);
  301.     transObj (infoBox, Thecat2, devHdl);
  302.     
  303.     RETURN TRUE
  304.   END InitResource;
  305.   
  306. PROCEDURE doInfo();
  307.   VAR but : INTEGER;
  308. BEGIN
  309.   but := DoSimpleBox (infoBox);
  310. END doInfo;
  311.  
  312. PROCEDURE ClrRsrc();
  313. BEGIN
  314.   RsrcFree();
  315. END ClrRsrc;
  316.  
  317. PROCEDURE ReplaceStr (VAR str : ARRAY OF CHAR; REF s1, s2 : ARRAY OF CHAR);
  318.   VAR p : CARDINAL;
  319.       sLen : CARDINAL;
  320.       s1Len: CARDINAL; 
  321. BEGIN
  322.   sLen := LENGTH (str);
  323.   s1Len:= LENGTH (s1);
  324.   p := MagicStrings.Pos (s1, str, 0, FALSE);
  325.   WHILE p <= sLen DO
  326.     MagicStrings.Delete (str, p, s1Len);
  327.     MagicStrings.Insert (s2, str, p);
  328.     sLen := LENGTH (str);
  329.     p := MagicStrings.Pos (s1, str, p, FALSE);
  330.   END;
  331. END ReplaceStr;
  332.   
  333. PROCEDURE FselGet(VAR InPath, InSel: ARRAY OF CHAR; REF ext, msg : ARRAY OF CHAR;
  334.                   pathOnly : BOOLEAN):BOOLEAN;
  335. (* Ausgelagert aus CAT.M, da ich die auch im Editor verwenden kann.
  336.  *)
  337. VAR scrapP : ARRAY[0..127] OF CHAR;
  338.     scrapN : ARRAY[0..12] OF CHAR;
  339.     l      : CARDINAL;
  340. BEGIN
  341.   MagicStrings.Assign(InPath, scrapP);
  342.   l := LENGTH (InPath);
  343.   IF l > 0
  344.   THEN
  345.     IF InPath[l-1] #'\'
  346.     THEN InPath[l-1] := '\';InPath[l] := 0c;
  347.     END;
  348.   END;
  349.   MagicStrings.Assign(InSel, scrapN);
  350.   MagicStrings.Append(ext, InPath);
  351.   MagicAES.WindUpdate(MagicAES.BEGMCTRL);
  352.   IF mtDir.GetDir(InPath, InSel, msg) THEN
  353.     MagicAES.WindUpdate(MagicAES.ENDMCTRL);
  354.     mtDir.DelTail(InPath);
  355.     IF pathOnly
  356.     THEN 
  357.       RETURN TRUE
  358.     ELSE
  359.       RETURN LENGTH (InSel) # 0;
  360.     END;
  361.   ELSE
  362.     MagicAES.WindUpdate(MagicAES.ENDMCTRL);
  363.     MagicStrings.Assign(scrapP, InPath);
  364.     MagicStrings.Assign(scrapN, InSel);
  365.     RETURN FALSE
  366.   END
  367. END FselGet;
  368.  
  369. PROCEDURE info (REF s: ARRAY OF CHAR);
  370. BEGIN
  371.   v.int := MagicAES.FormAlert (1, s);
  372. END info;
  373.  
  374. PROCEDURE InfoAlert(REF s1,s2,s3 : ARRAY OF CHAR);
  375. VAR scrap : ARRAY[0..255] OF CHAR;
  376. BEGIN
  377.   MagicStrings.Assign(s1, scrap);
  378.   MagicStrings.Append(s2, scrap);
  379.   MagicStrings.Append(s3, scrap);
  380.   info (scrap);
  381. END InfoAlert;
  382.  
  383. PROCEDURE doConfig(REF newPath: ARRAY OF CHAR; VAR newDataPath: ARRAY OF CHAR);
  384. TYPE varArray =  ARRAY [1..11] OF ARRAY[0..255] OF CHAR;
  385.      titleArray = ARRAY [1..11] OF ARRAY [0..39] OF CHAR;
  386.  
  387. CONST   lzhArc  = 'a $E$F $MINFILE.TXT';
  388.         lzhDearc= 'x $I$O $I OUTFILE.TXT';
  389.         zipArc  = '-a $E$F $MINFILE.TXT';
  390.         zipDearc= '-x $I$O $I OUTFILE.TXT';
  391.         
  392. VAR   tree      : PtrObjTree;
  393.       titles    : POINTER TO titleArray;
  394.       txtArray  : POINTER TO varArray;
  395.       pathOnly  : BOOLEAN; 
  396.       str, 
  397.       path      : ARRAY [0..255] OF CHAR;
  398.       suff,
  399.       name      : ARRAY [0..20] OF CHAR;
  400.       but, idx, 
  401.       i         : INTEGER;
  402.       res       : BOOLEAN;
  403.       or,
  404.       r         : mtUtils.tRect;
  405.       tf        : mtTextfiles.TEXTFILE;
  406.       ex        : BOOLEAN;
  407.       nFound    : BOOLEAN;
  408.       nameL     : CARDINAL;
  409.  
  410.   PROCEDURE translateOut (VAR src, dest : ARRAY OF CHAR);
  411.   BEGIN
  412.     MagicStrings.Assign (src, dest);  
  413.     mtDir.SplitPath (txtArray^[5], path, name, suff);
  414.     MagicStrings.Insert ("INFILE.", suff, 0);
  415.     ReplaceStr (dest, "$F", suff);          (* Infilename *)
  416.     ReplaceStr (dest, "$I", txtArray^[4]);  (* Importpath *)
  417.     ReplaceStr (dest, "$O", txtArray^[5]);  (* Outfilename *)
  418.     ReplaceStr (dest, "$E", txtArray^[6]);  (* Exportpath *)
  419.     ReplaceStr (dest, "$M", txtArray^[7]);  (* Messagepath *)
  420.     mtDir.SplitPath (txtArray^[9], path, name, suff);
  421.     ReplaceStr (dest, "$T", path);          (* Terminalpath *)
  422.   END translateOut;
  423.   
  424.   PROCEDURE getEdits();
  425.   BEGIN          
  426.     mtUtils.ObjcString (tree, Psarc, txtArray^[2]);
  427.     mtUtils.ObjcString (tree, Psdearc, txtArray^[3]);
  428.     mtUtils.ObjcString (tree, Pscomm, txtArray^[10]);
  429.   END getEdits;
  430.   
  431. BEGIN
  432.   MagicStrings.Assign ("", newDataPath); 
  433.   tree := pathbox;
  434.   ALLOCATE (txtArray, TSIZE (varArray));
  435.   IF txtArray = NIL
  436.   THEN
  437.     info ("[3][Install:|Fr die gewnschte|Operation steht|zuwenig Speicher|zur Verfgung.][Abbruch]");
  438.     RETURN
  439.   END;
  440.   FOR i := 1 TO 11 DO MagicStrings.Assign ("", txtArray^[i]); END;
  441.   ALLOCATE (titles, TSIZE (titleArray));
  442.   IF titles = NIL
  443.   THEN
  444.     info ("[3][Install:|Fr die gewnschte|Operation steht|zuwenig Speicher|zur Verfgung.][Abbruch]");
  445.     DEALLOCATE (titles, 0);
  446.     RETURN
  447.   END; 
  448.   (* Strings setzen *)
  449.   FOR i := 1 TO 10 DO
  450.     MagicStrings.Assign ("", txtArray^[i]);
  451.   END;
  452.   (* Jetzt Defaults festlegen *)
  453.   SetDefaultPath (newPath, v.int);
  454.   (* Jetzt Unterverzeichnisse anlegen *)
  455.   CreateDir ('IMPORT', v.int);
  456.   MagicStrings.Assign (newPath, txtArray^[4]);
  457.   MagicStrings.Append ('IMPORT\', txtArray^[4]);
  458.   CreateDir ('EXPORT', v.int);
  459.   MagicStrings.Assign (newPath, txtArray^[6]);
  460.   MagicStrings.Append ('EXPORT\', txtArray^[6]);
  461.   CreateDir ('MESSAGES', v.int);
  462.   MagicStrings.Assign (newPath, txtArray^[7]);
  463.   MagicStrings.Append ('MESSAGES\', txtArray^[7]);
  464.   CreateDir ('DATABASE', v.int);
  465.   MagicStrings.Assign (newPath, txtArray^[8]);
  466.   MagicStrings.Append ('DATABASE\', txtArray^[8]);
  467.  
  468.   (* Titel fr Fileselektor setzen *)
  469.   MagicStrings.Assign ("Packer ausw„hlen", titles^[1]);
  470.   MagicStrings.Assign ("Importpfad ausw„hlen", titles^[4]);
  471.   MagicStrings.Assign ("Outfilenamen festlegen", titles^[5]);
  472.   MagicStrings.Assign ("Exportpfad ausw„hlen", titles^[6]);
  473.   MagicStrings.Assign ("Nachrichtenpfad ausw„hlen", titles^[7]);
  474.   MagicStrings.Assign ("Databasepfad ausw„hlen", titles^[8]);
  475.   MagicStrings.Assign ("Terminalprogramm ausw„hlen", titles^[9]);
  476.   FOR i := Pspack TO Pscomm DO
  477.     mtUtils.SetObjcString (tree, i, txtArray^[i-Pspack+1]);
  478.   END;
  479.   MagicAES.FormCenter (tree, or);
  480.   MagicAES.FormDial (MagicAES.FMDSTART, or, or);
  481.   MagicAES.ObjcDraw (tree, 0, 8, or);
  482.   LOOP
  483.     but := MagicAES.FormDo (tree, 0);
  484.     but := INTEGER(BITSET(but) - {15});
  485.     idx := but - Pbpack+1;
  486.     CASE but OF
  487.       Pbpack..Pbterm:
  488.         (* Pfad holen *)
  489.         (* Nur bei pboutfil nur Dateinamen ohne Pfad nehmen,
  490.          * bei pbpack oder pbterm auch noch Dateinamen an Pfad 
  491.          * anh„ngen  
  492.          *)
  493.         IF but = Pboutfil
  494.         THEN
  495.           MagicStrings.Assign (txtArray^[4], path);
  496.           MagicStrings.Assign (txtArray^[idx], name);
  497.         ELSE
  498.           IF txtArray^[idx][0] # ''
  499.           THEN
  500.             mtDir.SplitPath (txtArray^[idx], path, name, suff);
  501.           ELSE
  502.             MagicStrings.Assign (newPath, path);
  503.             name[0] := "";
  504.           END;
  505.         END;
  506.         IF (but # Pbterm) 
  507.          & (but # Pboutfil)
  508.          & (but # Pbpack)
  509.         THEN
  510.           res := GetAndCreatePath (path, name, titles^[idx]);
  511.         ELSE
  512.           res := FselGet (path, name, '*.*', titles^[idx], FALSE);
  513.         END;
  514.         mtUtils.CalcArea (tree, 0, r); 
  515.         MagicAES.ObjcDraw (tree, 0, 8, r);
  516.         IF res
  517.         THEN
  518.           IF but = Pboutfil
  519.           THEN
  520.             MagicStrings.Assign (name, txtArray^[idx]);
  521.           ELSE
  522.             MagicStrings.Assign (path, txtArray^[idx]);
  523.           END;
  524.           IF (but = Pbpack) 
  525.           OR (but = Pbterm) 
  526.           THEN
  527.             IF name[0] # ''
  528.             THEN
  529.               MagicStrings.Append (name, txtArray^[idx]);
  530.             ELSE
  531.               MagicStrings.Assign ('', txtArray^[idx]);
  532.             END;
  533.           END;
  534.           mtUtils.SetObjcString (tree, but-Pbpack+Pspack, txtArray^[idx]);
  535.           mtUtils.CalcArea (tree, but-Pbpack+Pspack, r); 
  536.           MagicAES.ObjcDraw (tree, 0, 2, r);
  537.           IF but = Pbpack
  538.           THEN
  539.             (* Defaults fr die Kommandozeilen und das Outfile eintragen *)
  540.             nFound := FALSE;
  541.             nameL := MagicStrings.Length (name);
  542.             IF (MagicStrings.Pos ('LZH*', name, 0, TRUE) < nameL) OR
  543.                (MagicStrings.Pos ('LHA*', name, 0, TRUE) < nameL)
  544.             THEN
  545.               (* LHArc gefunden *)
  546.               mtUtils.SetObjcString (tree, Psarc, lzhArc);
  547.               mtUtils.SetObjcString (tree, Psdearc, lzhDearc);
  548.               MagicStrings.Assign ('OUTFILE.LZH', txtArray^[5]);
  549.               mtUtils.SetObjcString (tree, Psoutfil, txtArray^[5]);
  550.             ELSIF MagicStrings.Pos ('ZOO*', name, 0, TRUE) < nameL
  551.             THEN
  552.               mtUtils.SetObjcString (tree, Psarc, lzhArc);
  553.               mtUtils.SetObjcString (tree, Psdearc, lzhDearc);
  554.               MagicStrings.Assign ('OUTFILE.ZOO', txtArray^[5]);
  555.               mtUtils.SetObjcString (tree, Psoutfil, txtArray^[5]);
  556.             ELSIF MagicStrings.Pos ('ARC*', name, 0, TRUE) < nameL
  557.             THEN
  558.               mtUtils.SetObjcString (tree, Psarc, lzhArc);
  559.               mtUtils.SetObjcString (tree, Psdearc, lzhDearc);
  560.               MagicStrings.Assign ('OUTFILE.ARC', txtArray^[5]);
  561.               mtUtils.SetObjcString (tree, Psoutfil, txtArray^[5]);
  562.             ELSIF MagicStrings.Pos ('ZIP*', name, 0, TRUE) < nameL
  563.             THEN
  564.               mtUtils.SetObjcString (tree, Psarc, zipArc);
  565.               mtUtils.SetObjcString (tree, Psdearc, zipDearc);
  566.               MagicStrings.Assign ('OUTFILE.ZIP', txtArray^[5]);
  567.               mtUtils.SetObjcString (tree, Psoutfil, txtArray^[5]);
  568.             ELSE
  569.               nFound := TRUE;
  570.             END;
  571.             IF ~nFound
  572.             THEN
  573.               ObjcString (tree, Psarc, txtArray^[2]);
  574.               ObjcString (tree, Psdearc, txtArray^[3]);
  575.               mtUtils.CalcArea (tree, Psarc, r); 
  576.               MagicAES.ObjcDraw (tree, 0, 2, r);
  577.               mtUtils.CalcArea (tree, Psdearc, r); 
  578.               MagicAES.ObjcDraw (tree, 0, 2, r);
  579.               mtUtils.CalcArea (tree, Psoutfil, r); 
  580.               MagicAES.ObjcDraw (tree, 0, 2, r);
  581.             END;
  582.           END;
  583.         END; |
  584.       Pathhelp:
  585.         v.int := DoSimpleBox  (helppath); |
  586.       Pathok  : 
  587.         getEdits();
  588.         IF LENGTH (txtArray^[4]) = 0
  589.         THEN
  590.           (* Importpfad *)
  591.           v.int := MagicAES.FormAlert (1, '[3][Importpfad nicht angegeben!|Bitte w„hlen Sie einen Pfad aus!][Nochmal]');
  592.         ELSIF LENGTH (txtArray^[5]) = 0
  593.         THEN  
  594.           v.int := MagicAES.FormAlert (1, '[3][Outfile nicht angegeben!|Bitte w„hlen Sie die Datei aus!][Nochmal]');
  595.         ELSIF LENGTH (txtArray^[6]) = 0
  596.         THEN  
  597.           (* Exportpfad *)
  598.           v.int := MagicAES.FormAlert (1, '[3][Exportpfad nicht angegeben!|Bitte w„hlen Sie einen Pfad aus!][Nochmal]');
  599.         ELSIF LENGTH (txtArray^[7]) = 0
  600.         THEN
  601.           (* Messagepfad *)
  602.           v.int := MagicAES.FormAlert (1, '[3][Messagepfad nicht angegeben!|Bitte w„hlen Sie einen Pfad aus!][Nochmal]');
  603.         ELSIF LENGTH (txtArray^[8]) = 0
  604.         THEN
  605.           (* Databasepfad *)
  606.           v.int := MagicAES.FormAlert (1, '[3][Databasepfad nicht angegeben!|Bitte w„hlen Sie einen Pfad aus!][Nochmal]');
  607.         ELSIF LENGTH (txtArray^[9]) = 0
  608.         THEN
  609.           (* Terminalprogramm *)
  610.           v.int := MagicAES.FormAlert (1, '[3][Kein Terminalprogramm ausgew„hlt!|Bitte w„hlen Sie eine Datei aus!][Nochmal]');
  611.         ELSIF (LENGTH (txtArray^[1]) # 0) & (LENGTH (txtArray^[2]) = 0)
  612.         THEN
  613.           (* Leere Kommandozeile fr Einpacken *)
  614.           v.int := MagicAES.FormAlert (1, '[3][Die Kommandozeile zum Einpacken|des Infiles ist leer!|Bitte tragen Sie dort die|richtigen Befehle ein.][Nochmal]');
  615.         ELSIF (LENGTH (txtArray^[1]) # 0) & (LENGTH (txtArray^[3]) = 0)
  616.         THEN
  617.           (* Leere Kommandozeile fr Auspacken *)
  618.           v.int := MagicAES.FormAlert (1, '[3][Die Kommandozeile zum Auspacken|des Outfiles ist leer!|Bitte tragen Sie dort die|richtigen Befehle ein.][Nochmal]');
  619.         ELSE
  620.           ex := TRUE;
  621.           IF LENGTH (txtArray^[1]) = 0
  622.           THEN
  623.             v.int := MagicAES.FormAlert (1, '[3][Kein Packer ausgew„hlt!|Sind sie sicher, daž das korrekt ist?][Ja|Nein]');
  624.             ex := v.int = 1;
  625.           END;
  626.           IF ex & (LENGTH (txtArray^[1]) = 0)
  627.           THEN
  628.             v.int := MagicAES.FormAlert (1, '[3][Kein Kommandozeile fr das|Terminalprogramm festgelegt!|Sind sie sicher, daž das korrekt ist?][Ja|Nein]');
  629.             ex := v.int = 1;
  630.           END;
  631.           IF ex THEN EXIT; END;
  632.         END; |
  633.       (*
  634.       Pathquit: EXIT |
  635.       *)
  636.     ELSE
  637.     END;
  638.     mtUtils.ExclState (tree, but, MagicAES.SELECTED);
  639.     mtUtils.CalcArea (tree, but, r); 
  640.     MagicAES.ObjcDraw (tree, but, 1, r);
  641.   END;
  642.   mtUtils.ExclState (tree, but, MagicAES.SELECTED);
  643.   mtUtils.CalcArea (tree, but, r); 
  644.   MagicAES.ObjcDraw (tree, but, 1, r);
  645.   IF but = Pathok
  646.   THEN
  647.     getEdits();                         (* editables holen *)
  648.     (* Strings bernehmen *)
  649.     MagicStrings.Assign (newPath, path);
  650.     MagicStrings.Append ('CAT.INF', path);
  651.     IF mtTextfiles.OpenTextfile (path, mtTextfiles.WRITE, 512, tf)
  652.     THEN
  653.       getEdits();                                                                (* editable Strings holen *)
  654.       IF LENGTH(txtArray^[1]) > 0
  655.       THEN
  656.         mtDir.SplitPath(txtArray^[1], path, name, suff);
  657.         mtTextfiles.WriteConst (tf, path); mtTextfiles.WriteLn(tf);                (* Arc-Path *)
  658.         mtTextfiles.WriteConst (tf, name); mtTextfiles.WriteLn(tf);                (* Arc-Name *)
  659.       ELSE
  660.         mtTextfiles.WriteLn (tf);
  661.         mtTextfiles.WriteLn (tf);
  662.       END;
  663.       translateOut (txtArray^[2], str); 
  664.       mtTextfiles.WriteConst (tf, str); mtTextfiles.WriteLn(tf);                 (* arc-Command *)
  665.       translateOut (txtArray^[3], str);
  666.       mtTextfiles.WriteConst (tf, str); mtTextfiles.WriteLn(tf);                 (* dearc-Command *)
  667.       mtTextfiles.WriteConst (tf, txtArray^[5]); mtTextfiles.WriteLn(tf);        (* Outfile name *)
  668.       mtTextfiles.WriteLn(tf);          (* not supported from dialog *)
  669.       mtTextfiles.WriteLn(tf);          (* not supported from dialog *)
  670.       mtTextfiles.WriteConst (tf, txtArray^[7]); mtTextfiles.WriteLn(tf);        (* Messagepath *)
  671.       mtTextfiles.WriteConst (tf, txtArray^[4]); mtTextfiles.WriteLn(tf);        (* Importpath *)
  672.       mtTextfiles.WriteConst (tf, txtArray^[6]); mtTextfiles.WriteLn(tf);        (* Exportpath *)
  673.       mtTextfiles.WriteConst (tf, txtArray^[8]); mtTextfiles.WriteLn(tf);        (* Databasepath *)
  674.       mtDir.SplitPath(txtArray^[9], path, name, suff);
  675.       mtTextfiles.WriteConst (tf, path); mtTextfiles.WriteLn(tf);                (* TerminalPath *)
  676.       mtTextfiles.WriteConst (tf, name); mtTextfiles.WriteLn(tf);                (* TerminalName *)
  677.       translateOut (txtArray^[10], str);
  678.       mtTextfiles.WriteConst (tf, str); mtTextfiles.WriteLn(tf);                 (* Terminalcommand *)
  679.       mtTextfiles.CloseTextfile (tf);
  680.     ELSE
  681.       InfoAlert ("[3][Install:|", name, "|konnte nicht geschrieben|werden.][Abbruch]");
  682.     END;
  683.     
  684.     MagicStrings.Assign (txtArray^[8], newDataPath);
  685.     
  686.   END;
  687.   DEALLOCATE (titles, 0);
  688.   DEALLOCATE (txtArray, 0);
  689.   MagicAES.FormDial(MagicAES.FMDFINISH, or, or);
  690. END doConfig;
  691.   
  692. PROCEDURE GetAndCreatePath (VAR path, name : ARRAY OF CHAR; 
  693.                             REF title: ARRAY OF CHAR): BOOLEAN;
  694. VAR
  695.       gName   : FileStr;
  696.       oDta: ADDRESS;
  697.       dta : MagicDOS.DTA;
  698.       res : INTEGER;
  699.   
  700. BEGIN
  701.   name [0] := '';
  702.   v.bool := FselGet (path, name, '*.*', title, TRUE);
  703.   IF ~v.bool THEN RETURN FALSE END;
  704.   IF name[0] # ''
  705.   THEN
  706.     oDta := MagicDOS.Fgetdta ();
  707.     MagicDOS.Fsetdta (ADR(dta));
  708.     (* Testen, ob es ein Dateiname oder Pfadname ist,
  709.      * ggf. nachfragen und ggf. Pfad anlegen 
  710.      *)
  711.     Concat (path, name, gName, v.bool);
  712.     res := MagicDOS.Fsfirst (gName, {4});
  713.     MagicDOS.Fsetdta (oDta); 
  714.     IF (res = 0) & (dta.dAttrib = SHORT(INTEGER({4})))
  715.     THEN
  716.       (* Name ist ein Ordnername *)
  717.       (* Nachfragen! *)
  718.       IF MagicAES.FormAlert (1,'[2][Install:|Du hast noch einen|Ordnernamen im Namen angegeben.|Soll CAT in diesem Pfad installiert|werden oder im ausgew„hlten Pfad?][Auswahl|Name]') = 2
  719.       THEN
  720.         MagicStrings.Append (name, path);
  721.         MagicStrings.Append ('\', path);
  722.         name[0] := '';
  723.       END;
  724.     ELSIF (res = 0)
  725.     THEN
  726.       (* Nur Dateiname, ignorieren *)
  727.     ELSE
  728.       (* Kein Name, also neuer Ordnername! *)
  729.       res := MagicDOS.Dcreate (gName);
  730.       IF res # 0 
  731.       THEN
  732.         info ('[3][Ordner konnte nicht|angelegt werden!][Abbruch]');
  733.         RETURN FALSE;
  734.       END;
  735.       MagicStrings.Append (name, path);
  736.       MagicStrings.Append ('\', path);
  737.       name[0] := '';
  738.     END;
  739.   END;
  740.   RETURN TRUE;
  741. END GetAndCreatePath;
  742.  
  743. BEGIN
  744.   WindGet (0, WFWORKXYWH, deskSize);
  745. END InstRsc.
  746.